package com.ms.game.slot.base;

import java.lang.reflect.InvocationTargetException;

import com.ms.game.slot.base.message.SSlotCommonDmSeatPlayerInfoRequest;
import com.ms.game.slot.base.message.SlotBasicGameMessageRequest;
import com.ms.service.module.account.message.SSessionCloseNotify;
import com.ms.service.module.zone.message.SGameJackPotLockResponse;
import com.xpec.c4.message.MessageTypes;


/**
 * slot game server action interface
 * @author TW15012
 *
 */
public interface ISlotGameServerAction
{
	/**
	 * 客戶端要求進駐機台
	 * @param request
	 */
	void revClientGameSeatVerify(SlotBasicGameMessageRequest request);
	
	
	/**
	 * 驗證機台入座資料 - back
	 * @param request
	 */
	void revClientGameSeatVerifyBack(SlotBasicGameMessageRequest request);
	
	/**
	 * 玩家離開機台
	 * @param request
	 */
	void revGameLeaveSeat(SlotBasicGameMessageRequest request);
	
	
	/**
	 * 玩家離開機台
	 * @param request
	 */
	void revGameLeaveSeatBack(SlotBasicGameMessageRequest request);
	
	
	/**
	 * 玩家spin
	 * @param request
	 * @throws InvocationTargetException 
	 * @throws IllegalArgumentException 
	 * @throws IllegalAccessException 
	 * @throws SecurityException 
	 * @throws NoSuchMethodException 
	 */
	void revClientSpin(SlotBasicGameMessageRequest request);
	
	/**
	 * 斷線處理
	 * @param request
	 */
	void revDisConnect(SSessionCloseNotify request);
	
	/**
	 * JP更新回傳
	 * @throws InvocationTargetException 
	 * @throws IllegalArgumentException 
	 * @throws IllegalAccessException 
	 * @throws SecurityException 
	 * @throws NoSuchMethodException 
	 */
	void revGameJackPotLockBack(SGameJackPotLockResponse request) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;
	
	/**
	 * 讀取機台歷史資料
	 * @param o
	 */
	void revGameHistoryRecord(SlotBasicGameMessageRequest request);

	/**
	 * client 要求取得機台內的角色資訊, doorman 轉傳到 game module<br>
	 * 消息號碼: {@link MessageTypes#S_SLOT_COMMON_DM_SEAT_PLAYER_INFO_REQUEST}
	 * @param request
	 */
	public void revSeatPlayerInfoRequest(SSlotCommonDmSeatPlayerInfoRequest request);
	
	
	/**
	 * DM 通知 game server玩家準備入座
	 * @param request
	 */
	public void revSeatVerifyInfoRequest(SlotBasicGameMessageRequest request);
	
	/**
	 * 收到 client 離線掛機停止清除Option
	 * @param obj
	 */
	public void revClientStopAutoSpinOptionQuery(Object obj);
	
}
